package d01_Exception;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Test01 {
    public static void main(String[] args) throws ParseException {
        /*
        * 异常&& Collection*/
        /*
        * 异常：
        *   认识异常：代表程序可能出现的问题。
        *
        **/
        //认识异常
        int[] arr={11,22,33,44,55};
//        System.out.println(arr[5]); //报错：ArrayIndexOutOfBoundsException 数据索引越界异常
        String name=null;
//        System.out.println(name.length());//报错：NullPointerException 空指针异常
//        System.out.println(10/0); //报错： ArithmeticException  数学操作异常
        Object o="张三";
//        Integer i=(Integer) o;//报错 类型转换异常：ClassCastException
/*
* 异常的体系：
*   Error：代表程序系统级别错误（属于严重问题）
*   Exception：叫异常，代表我们程序可能出现的问题。
*       运行时异常：RuntimeException极其子类，编译阶段不会错误提醒，运行时出现的异常。
*       编译时异常：编译阶段就会 报错提醒。
*
* 异常的作用：
*       1、用来查询系系统bug的关键关键信息。
*       2、异常可以作为方法内部的一种特殊返回值，以便通知上层调用着底层执行情况。
*
* 自定义异常：
*       指的是java无法为这个世界上全部的问题都提供异常类来代表，如果企业自己的某种问题，想通过异常来表示，以便用异常类管理该问题，就需要自己类定义异常类。
*
*
* 异常处理：
*
* */
       //编译时异常
       parseDate("2025-03-08 19:01:21");
        try {
            getdivide(4,1);
        } catch (Exception e) {
            e.printStackTrace();//打印异常信息
        }
        try {
            save(99);
        } catch (AgelllegException e) {
            e.printStackTrace();
        }
    }
    //编译时异常
    public static void parseDate(String s) throws ParseException {
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date=sdf.parse(s);//编译时异常
        System.out.println(date);

    }
    public static int getdivide(int a,int b){
        if (b==0){
            System.out.println("参数有问题");
            throw new RuntimeException("/ by 0!");
        }
        int c=a/b;
        return c;
    }
    public static void save(int age) throws AgelllegException {
        if (age<0 || age>150){
            //这个年龄非法
//            throw new AgelllegRuntimeException("/ age xiaogao!");
            throw new AgelllegException("/age is xiaogao");
        }
        System.out.println("年龄保存成功");
    }
}
/*
* 自定义运行时异常
*   （1）定义一个异常类继承RuntimeExcption
*   （2）重写构造器
*   （3）通过throw new 异常类（XXX） 来创建对象并抛出
*   （4）编译阶段不报错，提醒不强烈，运行时才可能出现
**/
class AgelllegRuntimeException extends RuntimeException{
    public AgelllegRuntimeException() {
    }

    public AgelllegRuntimeException(String message) {
        super(message);
    }
}




/*自定义编译时异常
*   （1）定义一个异常类继承Excption
*   （2）重写构造器
*   （3）通过throw new 异常类（xxx） 来创建对象并抛出
*   （4）编译就报错，提醒更加强烈*/
class AgelllegException extends Exception{
    public AgelllegException() {
    }

    public AgelllegException(String message) {
        super(message);
    }
}